package com.godGuang.mapper;

import com.godGuang.domain.*;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
 * @author : 段敏强
 * @className : ContentMapper
 * @description : 描述说明该类的功能
 * @createTime : 2024/01/08 14:19
 */

/**
 * 发布内容Mapper接口
 */

@Mapper
public interface ContentMapper {


    /**
     * 向内容列表中添加内容
     *
     * @param content 要添加的内容
     *
     */
    void addContent(Content content);

    /**
     * 根据科室类型ID获取科室类型
     *
     * @param catalogueId 部门类型ID
     * @return 部门类型
     */
    Catalogue contentById(@Param("catalogueId") Integer catalogueId);

    /**
     * 添加中间件
     *
     * @param catalogueId 部门类型ID
     * @param contentId        内容ID
     */
    void addMiddle(@Param("catalogueId") Integer catalogueId, @Param("contentId") Integer contentId);

    /**
     * 根据科室类型ID获取科室类型
     *
     * @param catalogueId 部门类型ID
     * @return 部门类型
     */
    List<Content> createContentList(@Param("catalogueId") Integer catalogueId);

    /**
     * 根据科室类型ID获取科室类型
     *
     * @param catalogueId 部门类型ID
     * @return 部门类型
     */
    List<Disease> diseaseList(@Param("catalogueId") String catalogueId);


    /**
     * 查询所有内容
     *
     * @return 所有内容
     */
    List<Content> list();

    /**
     * 获取评论列表
     *
     * @param contentId 内容ID
     * @return 评论列表
     */
    Integer reviewList(@Param("contentId") Integer contentId);

    /**
     * 根据内容ID收集列表
     *
     * @param contentId 内容ID
     * @return 返回Integer类型的列表
     */
    Integer collectList(@Param("contentId") Integer contentId);

    /**
     * 添加评论
     *
     * @param contentId 内容ID
     * @param review 评论
     */
    void reviewAdd(@Param("contentId") Integer contentId, @Param("review") Integer review);

    /**
     * 收藏内容
     *
     * @param contentId 内容ID
     * @param collect    是否收藏，1为收藏，0为取消收藏
     */
    void collectAdd(@Param("contentId") Integer contentId, @Param("collect") Integer collect);

    /**
     * 根据contentId获取Content对象
     *
     * @param contentId 内容ID
     * @return 对应Content对象
     */
    Content contentByIds(@Param("contentId") String contentId);

    /**
     * 将ContentEnshrineMiddle对象进行封装，返回封装后的ContentEnshrineMiddle对象
     *
     * @param contentEnshrineMiddle 需要进行封装的ContentEnshrineMiddle对象
     * @return 封装后的ContentEnshrineMiddle对象
     */
    ContentEnshrineMiddle contentEnshrineMiddleData(ContentEnshrineMiddle contentEnshrineMiddle);

    /**
     * 将一个 Enshrine 对象添加到 Enshrine 的集合中。
     *
     * @param enshrine 要添加的 Enshrine 对象
     */
    void enshrineAdd(Enshrine enshrine);

    /**
     * 将内容添加到中间层。
     *
     * @param contentId 内容ID
     * @param userId 用户ID
     */
    void contentEnshrineMiddleAdd(@Param("contentId") Integer contentId, @Param("userId") Integer userId);


    /**
     * 在中间位置插入内容，删除指定位置的内容。
     *
     * @param contentId 内容ID
     * @param userId 用户ID
     */
    void contentEnshrineMiddleDelete(@Param("contentId") Integer contentId, @Param("userId") Integer userId);

    /**
     * 获取用户收藏的内容列表
     *
     * @param userId 用户ID
     * @return 用户收藏的内容列表
     */
    List<Content> myCollectionList(@Param("userId") String userId);

    /**
     * 获取个人发布列表
     *
     * @param userId 用户ID
     * @return 包含个人发布内容的列表
     */
    List<Content> personalPublishingList(@Param("userId") String userId);
}
